基于Spring框架的Java数据库连接对象:JdbcTemplate

Spring JDBC

  • Spring框架对JDBC的简单封装,它提供了一个JDBCTemplate对象,简化JDBC的开发。

快速入门

  1. 导入jar包

  2. 创建JdbcTemplate对象,传递DataSource对象

    • JdbcTemplate template = new JdbcTemplate(dataSource);
  3. 调用JdbcTemplate的方法,完成CRUD的操作

    • update()
    • queryForMap()
    • queryForList()
    • query()
    • queryForObject()

方法

update

  • update():执行DML增、删、改语句。
1
2
3
4
5
6
7
/* 添加数据 */
// SQL语句
String sql = "UPDATE account SET balance = ? ";
// 调用update方法
int update = jdbcTemplate.update(sql, 1000);
// 输出结果
System.out.println("update添加:"+update);
1
2
3
4
5
6
7
/* 修改数据 */
// SQL语句
String sql = "INSERT INTO account VALUES (?,?,?),(?,?,?) ";
// 调用update方法
int update = jdbcTemplate.update(sql,null,"Rat",1000,null,"Ant",1000);
// 输出结果
ystem.out.println("update修改:"+update);
1
2
3
4
5
6
7
/* 删除数据 */
// SQL语句
String sql = "DELETE FROM account WHERE name IN (?,?) ";
// 调用update方法
nt update = jdbcTemplate.update(sql,"Rat","Ant");
// 输出结果
System.out.println("update删除:"+update);

queryForMap

  • queryForMap():查询结果,将结果集封装为Map集合。(结果集长度只能是1)
    • 将列名作为key,将字段作为value,将一条记录封装为一个map集合。
    • 一个Map对应着一条记录。
      1
      2
      3
      4
      5
      6
      7
       /* 查询一条记录,封装至Map集合 */
      // SQL语句
      String sql = "SELECT * FROM account WHERE id = ?";
      // 调用queryForMap方法
      Map<String, Object> map = jdbcTemplate.queryForMap(sql, 1 );
      // 输出结果
      System.out.println(map);

queryForList

  • queryForList():查询结果,将结果集封装为List集合。
    • 将每一条记录封装为一个Map集合,再将Map集合装载到List集合中。
    • 一个List对应着一张表。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      /* 查询所有记录,封装至List集合 */
      // SQL语句
      String sql = "SELECT * FROM account";
      // 调用queryForMap方法
      List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
      // 输出结果
      for (Map<String, Object> stringObjectMap : list) {
      System.out.println(stringObjectMap);
      }

query

  • query():查询结果,将结果集封装为JavaBean对象。
    • 将列名作为成员变量,将字段作为成员变量的值,将一条记录封装为一个JavaBean对象。
      • 一个JavaBean对象对应着一条记录。
  • query的参数:RowMapper接口
    • 使用BeanPropertyRowMapper实现类,可以完成数据到JavaBean的自动封装。
      • new BeanPropertyRowMapper<类型>(类型.class)

传递RowMapper匿名内部类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// JavaBean对象:Record

public class Record {
/*基本数据类型*/
private int id;
private String ename;
private int job_id;
private int mgr;
private Date join_date;
private double salary;
private double bonus;
private int dept_id;
/*省略get、set方法*/
/*省略toString方法*/
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* 查询所有记录,封装至List<Record>集合*/
// SQL语句
String sql = "SELECT * FROM emp";
// 调用query方法
// 传递RowMapper匿名内部类,手动的一条一条的获取ResultSet结果集中的数据,然后封装进JavaBean对象
List<Record> list = jdbcTemplate.query(sql, new RowMapper<Record>() {
@Override
public Record mapRow(ResultSet reSet, int i) throws SQLException {
int id = reSet.getInt(1);
String ename = reSet.getString(2);
int job_id = reSet.getInt(3);
int mgr = reSet.getInt(4);
Date join_date = reSet.getDate(5);
double salary = reSet.getDouble(6);
double bonus = reSet.getDouble(7);
int dept_id = reSet.getInt(8);
Record record = new Record(id, ename, job_id, mgr, join_date, salary, bonus, dept_id);
return record;
}
}
// 输出结果
for (Record record : list) {
System.out.println(record);
}

传递BeanPropertyRowMapper实现类

  • 注意,JavaBean对象中的成员变量类型一定要使用引用数据类型。
  • 因为基本数据类型不能接受NULL值,而数据库中的字段可以设置为NULL值,所以在传递时,会发生类型转换的问题。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// JavaBean对象:Record

public class Record {
/*引用数据类型*/
private Integer id;
private String ename;
private Integer job_id;
private Integer mgr;
private Date join_date;
private Double salary;
private Double bonus;
private Integer dept_id;
/*省略get、set方法*/
/*省略toString方法*/
}
1
2
3
4
5
6
7
8
9
10
/* 查询所有记录,封装至List<Record>集合*/
// SQL语句
String sql = "SELECT * FROM emp";
// 调用query方法
// 传递BeanPropertyRowMapper实现类,自动获取ResultSet结果集中的数据,自动封装进JavaBean对象
List<Record> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(Record.class));
// 输出结果
for (Record record : list) {
System.out.println(record);
}

queryForObject

  • queryForObject:查询结果,将结果集封装为对象。
    • 用于聚合函数(查询表的记录数、列的最大数最小数平均数)
      1
      2
      3
      4
      5
      6
      /* 查询总记录数 */
      String sql = "SELECT COUNT(id) FROM emp";
      // 调用queryForObject方法
      Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
      // 输出结果
      System.out.println(integer);
-------------本文结束-------------
Donate comment here